package com.record.utils;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
import java.util.Optional;

public final class Empties {

    private Empties() {}

    // String：自动 trim
    public static boolean impty(CharSequence cs) {
        return cs == null || cs.toString().trim().isEmpty();
    }

    // 集合
    public static boolean impty(Collection<?> c) {
        return c == null || c.isEmpty();
    }

    // Map
    public static boolean impty(Map<?, ?> m) {
        return m == null || m.isEmpty();
    }

    // 数组
    public static boolean impty(Object[] arr) {
        return arr == null || arr.length == 0;
    }

    // Optional
    public static boolean impty(Optional<?> o) {
        return o == null || !o.isPresent();
    }

    // 兜底：自动识别常见类型
    public static boolean impty(Object o) {
        if (o == null) return true;
        if (o instanceof CharSequence) return impty((CharSequence) o);
        if (o instanceof Collection)   return impty((Collection<?>) o);
        if (o instanceof Map)          return impty((Map<?, ?>) o);
        if (o.getClass().isArray())    return Array.getLength(o) == 0;
        return false; // 其他类型不认为空
    }

    // 便捷取反
    public static boolean notImpty(Object o) {
        return !impty(o);
    }
}
